Черная область за хп баром вроде свободно скейлится ибо просто черная текстура без анимаций. Изменение размера хп бара тоже вроде не багает (mdlvis нормально воспроизводит). Я так понял, правая грань хп бара привязана к кости, которая движется анимациями. Переведи в .mdl и пролистай на дно, там циферки очевидные :) Это должно покрыть все вопросы.
Сам как то делал тоже такое но в точности не воспроизведу инструкцию
Открываешь карту в MPQ редакторе, ищешь war3map.j, в нём находишь функцию config. Добавляешь строку, написанную мною выше, в начало функции. Единственный аргумент это адрес файла музыки
Почему бы не сделать привязку к классу героя: танки не будут получать очки за исцеление, дд-шеры за полученный урон, а лекари за нанесенный урон. Тем самым, стату можно будет набивать исключительно выполняя свою роль.
Простыми способами никак, только хаками. Для начинающих это будет сложно, проще дать классификацию здания и добавить 150000 хп, и тогда хп не не будет видно с маной так же, но у этого способа много изьянов.
А много ли юнитов будут с хп баром? если серьёзно то решения нет и фрейм не найти этот, оно зашито в недра движка. Но опять таки Disable pre-selection вариант всё таки, если потом отрисовать кастомные хп бары через специальную модель, если она будет эффектом, то это не вызовет никакой доп нагрузки даже у 100 юнитов.
Хоспаде. Вынеси свою лучницу в отдельную карту. У тебя же чёрт ногу сломит.
Не знаю, у меня автокаст нормально перезаряжается. Возможно, дело в основе. Попробуй дать не "Ледяные", а "Огненные стрелы".
Вот. Забыл прикрепить.
А может быть, дело в том, что твоя лучница - "Здание". Честное слово, это три самые замороченные способности у близзард: "Огненные", "Отравленные" и "Ледяные" стрелы. На первый взгляд они одинаковые, но стоит присмотреться... Ух!
Тебе его стрелялка то нужна? Ну изи же, отпрынгул и помахал руками, обычный канал с временем каста и параметром - отключить прочие способности.
Остальное - 4 атаки, ну это изи делаем из даммиков (мне чето приглянулась модель орб атаки маски вампиризма) ну и двигаем их линено от героя в нужную сторону, и ищим по пути врагов, наносим им урон от лица героя + проверяем какие у героя есть абилки и орбы, эмитируем орбы и пассивки, ну манабрейк - сжигаем ману и наносим еще урона, рисуем модель, баш - ну молот бурь в голову, дезоль 0- ну дамик с орбом дезоля.
Сам хотел целиком пангольера слепить, но ка кто забил - нет норм модели.
А группы в массиве CreepsGroup созданы? Нужно либо создавать группы при инициализации, проходясь циклом по массиву, либо в константах указать "размер" массива, и тогда они будут сами созданы. То есть нужно 12 групп -- ставишь размер 12, группы будут созданы в ячейках с 0 по 11.
Ну, Варкрафт 3 в целом не любит когда слишком много юнитов одновременно на экране, а если учитывать, что у них ещё возможно есть и модель, то графическая часть начинает сильно резать фпс, с этим особо ты ничего не сделаешь. По поводу твоего кода, слишком напоминает GUI особенно проверками, ниже как бы я написал, но так как это отрывок и нет пояснения что в целом код должен делать, то я не знаю сколь близко он выполнит твои цели/нужды.
Код
globals
timer gg_timer_Move = null
endglobals
function GetAxisAngle takes real fromX, real fromY, real targX, real targY returns real
return Rad2Deg( Atan2( targY - fromY, targX - fromX ) )
endfunction
function GetAxisDistance takes real castX, real fcastY, real targX, real targY returns real
return SquareRoot( Pow( targX - castX, 2 ) + Pow( fcastY - targY, 2 ) )
endfunction
function NewX takes real locX, real dist, real angle returns real
return locX + dist * Cos( Deg2Rad( angle ) )
endfunction
function NewY takes real locY, real dist, real angle returns real
return locY + dist * Sin( Deg2Rad( angle ) )
endfunction
function Move_GroupActionsHandler takes unit target returns nothing
local integer uid = GetUnitTypeId( target )
local real speed = 8 //скорость движения | Локальные переменные советую писать с маленькой буквы.
local real targX = GetUnitX( target ) // GetWidgetX не быстрее GetUnitX, не нужно этого делать :)
local real targY = GetUnitY( target ) // GetWidgetY не быстрее GetUnitY, не нужно этого делать :)
local real moveX = 0.
local real moveY = 0.
local real angle = 0.
if udg_Time >= 6000 then
if uid >= 'h044' and uid <= 'h046' then
call RemoveUnit( target )
else
call UnitDamageTargetBJ( udg_Caster, target, 2000., ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNKNOWN )
endif
else
if GetAxisDistance( udg_CasterX, udg_CasterY, targX, targY ) <= udg_Time / 10 * 8 then // Сделай один раз враппер и будет проще.
if RAbsBJ( targX ) <= 4000 and RAbsBJ( targY ) <= 4000 then //чтобы не двигал если юнит на краю карты | не нужно каждый раз читать местоположение по-новой.
if not IsUnitType( target, UNIT_TYPE_STRUCTURE ) and target != udg_Caster and target != udg_DummyCaster then
set angle = GetAxisAngle( udg_CasterX, udg_CasterY, targX, targY ) //угол между координатами кастера и коорд юнита | через враппер.
set moveX = NewX( moveX, speed, angle )
set moveY = NewY( moveY, speed, angle ) // В твоей же системе было с минусом, ибо угол считался от кастера, собственно, если нужно отталкивание, но нужен +, если что просто замени на -speed
if not IsTerrainPathable( moveX, moveY, PATHING_TYPE_FLYABILITY ) or uid == 'h045' or uid == 'h046' then // лучше в начале проверить есть ли смысл двигать или нет.
// + RAbsBJ( 50 ) дал бы не совсем правильные результаты, ибо координаты могут быть отрицательными...
if GetTerrainType( moveX, moveY ) != 'Jdrt' then
call SetTerrainType( moveX, moveY, 'Jdrt', -1, 1, 0 ) //если тип земли не изменен на этот, изменить его
endif
call SetUnitX( target, moveX ) //двигаем юнита
call SetUnitY( target, moveY )
endif
endif
endif
endif
endif
endfunction
function Move_GroupActions takes nothing returns nothing //двигаем всех юнитов от точки кастера??
call Move_GroupActionsHandler( GetEnumUnit( ) )
endfunction
function Move_Actions takes nothing returns nothing
local integer i = 0
local integer pid = GetOwningPlayer( udg_Caster )
if udg_Time == 0 then //в начале создаются даммики 45 штук...
loop
exitwhen i == 45
set udg_MoveAngle = i * 8.
set udg_Dummy[ i ] = CreateUnit( Player( pid ), 'h045', udg_CasterX - 200 * Cos( udg_MoveAngle ), udg_CasterY - 200 * Sin( udg_MoveAngle ), udg_MoveAngle )
set i = i + 1
endloop
if udg_Group == null then
set udg_Group = CreateGroup( )
endif
else
if udg_Time <= 6000 then
set i = 0
loop
exitwhen i > bj_MAX_PLAYERS // цикл всех игроков ничем не хуже...
if Player( i ) == PLAYER_SLOT_STATE_PLAYING then
call GroupEnumUnitsOfPlayer( udg_Group, Player( i ), null )
call ForGroup( udg_Group, function Move_GroupActions )
call GroupClear( udg_Group )
endif
set i = i + 1
endloop
else
call PauseUnit( udg_Caster, false )
call PauseTimer( gg_timer_Move )
endif
endif
set udg_Time = udg_Time + 10
endfunction
//===========================================================================
function InitTrig_Move takes nothing returns nothing
set gg_timer_Move = CreateTimer( )
call TimerStart( gg_timer_Move, .01, true, function Move_Actions )
endfunction
Полноценный псевдоконтроль возможен лишь с помощью мемхака.
Прочее же - смотри как сделано в доте, ульт спектры был в опен доте и там есть фищка, атаку то стопить можно но толку мало.
Линейная интерполяция не делает вещи плавнее. Это равномерная интерполяция, линейная, так не движутся "живые" персонажи. За "плавностью" к Безье или Эрмиту. xgm.guru/p/wc3/anims-a-ya-3
А по поводу темы топика - могу обратить внимание автора на:
Менял ли ты структуру исходного скелета, делая новую анимацию (имею ввиду только исходные кости, например, кость головы.)? Если да, то как?
Попробуй посмотреть, что у тебя с интерполяцией для вращения по нужной оси на рутовом объекте.
Вроде бы удалось решить проблему самостоятельно. Ошибка действительно была элементарной - идентификатор не устраивал введённый туда заглавный символ, а я не знал об этом. Простите за беспокойство.
removePositive - позитивный / removeNegative - негативный
magic - магический / physical - физический
timedLife - время жизни (у призываемых существ)
aura - ауры
autoDispel - ??? (скорее всего есть какие-то скилы с баффами отключающие)
Для конкретной проверки есть Unit Has Specific Buff
можно проверять самому. берешь создаешь тестовую карту, создаешь двух юнитов, создаешь триггер с периодической проверкой дебагом и проверяешь у одного из них есть ли бафф. И в игре проверяешь
Возможно это было сделано в старой версии JPNG NG 5d, попробуйте отредактировть этой версией, и найти ту триггерную фу-ию и изменить исп. кастом скрипт, который есть по ссылке, которую предложил факов. Как поменяете, сохраните.
Потом, откройте через JPNG Rebuild, и должно сработать.
Это ошибка возникает из-за несоответствие граф. части триггеров, для GUI посредством одного текстового файлика настройки для WE.
Должно помочь.
Они воспроизводят анимации эффект, смотри в константах. Там они на все виды анимаций расписаны. Короче, это как SetUnitAnimation, но только для эффектов.
Uint32, да даже на ходу, ну именно в моей карте этого не было, но это возможно... на всё том же мемхаке
выгружаем библиотеку из памяти
правим конфиг
снова подгружаем библиотеку
Вуаля хоткей изменен
Но это всё мемхак и только 126 патч
На 131+ есть более крутая фишка, это смена хоткея вообще и смена описания
Только я так и не пойму зачем тебе это.. на мемхаке это всё сложно и не актуально, ибо есть инструменты по круче
Кстати я не замечал в 131, в 132 заметил, что хоткей способности дописывается сам, достаточно его указать лишь в параметрах РО
открываем архивы варика и достаём оттуда из папочки scripts файлы с расширением ai
это и будет аи написанный на jass
далее ты должен разобраться в файлах людей и эльфов и скопировать кусок отвечающий за этот спел из эльфов в хуманов
Так ты же выключаешь триггер на 18 секунд вот он и не срабатывает.
Поставь условие, что герыч не имеет абилки-пустышки, если не имеет - дать её и через 18 сек забрать и пустить молнию.
Правда я не уверен насчёт того, отловится ли attacking unit через 18 сек вейта, проверь...
Вообще, если устраивает орбом - то даёшь "сферу молний" с эффектом "цепь молний", у которой 18 сек перезарядка(у цепи не у сферы)
Ну если делать через орб эффект - у предметов есть способности "сфера замедления" и "сфера молний (новая)". Эти способности позволяют с указанным шансом применять в цель атаки указанный скилл.
Код не повлияет особо на вес кампании. Время можно экономить переделывая одну и ту же карту а не создавая новую (Переделка только ланда и квестовых триггеров) Но если 8 карт готовы - то copy-paste самый простой способ.
Есть еще утилита которая облегчает внедрение обьектов/наработок. Сам не пользовался
Ошибка в коде, jass работает везде. pro100master, пишет бред, ибо незнает что все карты для warcraft 3 имеют сценарий на Jass, т.к все ваши триггеры в итоге преобразуются в jass и хранятся в war3map.j, тоже самое и с АИ, которое для кампаний изначально написано на jass и прекрасно работает.
Смотрите где у вас ошибки, cjass\vjass интерпретаторы могут не верно работать с картами кампаний, пробуйте написать код на чистом jass без надстроек.
KiWave, а вот ии такая штука что хз что ему не хватает, бывает они ломаются и только добывают ресурсы. Тщательно проверь настройки всех зданий и доступны ли они ИИ по ресурсам и требованиям, просто раздай контроль над ИИ себе и сиди смотри за ним.
Zeuz, руна пустышка является предметом а значит хэндлом
надо просто не забывать обнулять переменные
можно ещё удалить её перед обнулением если так хочешь
утечки возникают только при криворукой работе с хэндлами
если так хотите избавится от утечек то лучше почитайте статьи вместо того чтобы строить костыльную меху
VetsaN, таких событий нету
надо записывать все предметы в бд и периодическим таймером отслеживать их состояние
смерть предмета можно отследить с помощью TriggerRegisterDeathEvent но её использование нежелательно
либо делай все предметы юнитами
вот статья про бд
Если квест активен и не выполнен, а убитый - волк, то прибавляем 1 к переменной-счётчику для квеста. Если переменная равна 5, то засчитать выполнение квеста.
В 1.31 можно, по идее, просто триггерно убрать Anss из предмета на время и потом вернуть обратно, вместо жонглирования самими предметами. Мемхак, думаю, так тоже может.
ты отдал приказ перейти атакую противников
он будет идти атакуя всех встретившихся врагов
если враги найдены то он их атакует
если врагов нету то он идёт
если тебе нужно чтобы шли не атакуя врагов то отдай просто приказ "move"
вот пример
проверяем выделен, но есть некоторые вылеты. Нужно выключать/включать тригг на ордер, проверять что умер гер и так далее. у меня от убийства героя вылетает почему-то. еще вылет от не существующего номера игрока (игрок с номером -1 не существует)
Ты хочешь сделать такую механику в своей карте?
Или тебя просто напрягает, что такое есть в 1 доте?
Нужны холодные тесты по идее хайд юнита и короткая неуязвимость ДОЛЖНЫ сбивать очередь приказов, весьма странно, что этого не происходит
есть горячая клавиша отмены. Но это работать должно, если у игрока юнит выделен. И кнопка отмены не заблочена и не спрятана. Горячая клавиша напрямую связана с видимостью клавиши, пробовал прятать кнопку, и тогда также не работает и hotkey
function ForceUICancelBJ takes player whichPlayer returns nothing
if (GetLocalPlayer() == whichPlayer) then
// Use only local code (no net traffic) within this block to avoid desyncs.
call ForceUICancel()
endif
endfunction
xgm.guru/p/wc3/220178если надо, чтобы не бежал строить. Вы уже отдали приказ строить в точку, и нужно сразу же отдать отмену. сразу же отменить можно. Но приказ стоп обычно не срабатывает.
xgm.guru/p/wc3/218129приказ отмены. Идет на апгрейды, тренировку и прочее. Вы может неправильно отлов делаете?
world_editor, я нашёл путь к решению! Правда, есть косяки..
Движение - это тоже способность. А если нажата одна способность, то нельзя нажать применение другой способности. Что это значит? То, что если нажата вторая способность, то первая не нажата. Ставим применение обеих способностей (движение и стоп) в один триггер, разделяя их логической переменной. А изменение значения этой переменной кидаем в триггеры отлова способностей/приказов.
Но вот косяки: из-за периодичности триггера (даже при изменении на 0.03 с.) переменная не успевает сразу поменяться, из-за чего приказ второй способности прожимается несколько раз и слышно щелчки. А если нажать левую кнопку во время движения, она сработает так же, как "Стоп". Нужно каким-то образом поменять значения переменных, но где - пока не могу сообразить, голова не варит уже. Попробуй продолжить самостоятельно.
можешь посмотреть как тут перехватывается урон. хоть я и не рекомендую делать через выдачу неуязвимости, лучше повышать как нибудь максимальное хп если урон выше чем текущее возможное восполнение хп, а затем вернуть обратно как было и провести нужные манипуляции
ПС. Давать спеллбук после найма (чтобы он сам пропадал после морфа) героя нельзя, ибо в этом случае, если герой не успел или не захотел выбрать талант, то у него пропадает такая возможность после морфа.
Делать нужно именно так. И что бы у тебя не было здесь ошибки, тебе нужно каким-либо образом обозначить то, что у героя есть непотраченный талант. Т.е. ты будешь давать герою спеллбук после морфа, если у него есть доступные очки талантов.
И ещё кое-что: если ты триггерно даёшь спеллбук и пермоментишь его (тоже триггерно), то после морфа он не пропадаёт, а если ты его отнимаешь - он не возвращается (т.е. нету лишних ненужных появлений/исчезновений абилки).
А так же смотри что бы спеллбук не остался пустым, решается это пермоментом абилок внутри спеллбука.
NatriY, все магические заклинания, наносящие урон. например можно переделать все стандартные близзардские абилы, где есть урон, на триггерные кастомные абилы. И радуемся). Это рили.
Аура выносливости, меняем её на пустую (у найтсталкера 5 уровней у пассивки, днем всегда 5 уровень и нулевой бонус, а по ночам реальный уровень)
Либо берешь за основу способности без иконки, либо засовываешь её в спеллбук и запрещяешь его для игрока, либо хак на память (лежит в барахолке) и прятать абилку.
ну в принципе нет не обязательно, но удалять можно, хуже не будет - но для того чтобы был какой то толк от этого еще нужно будет сохранить куда то triggerconditon и triggeraction чтобы потом их удалить. Раньше вроде был баг с удалением триггеров (щяс его пофиксили или нет не знаю) но вот писать DestroyTrigger( GetTriggeringTrigger) в самом триггере не лучшая идея, это приводило к каким то багам (сам не видел) но в доте своя система удаления триггеров где они хранятся в запруженными в структуре минуту после удаляются, думаю это не спроста.
Но ведь сами по себе ошибки не происходят.
Причина подобного это А) - невнимательность либо твоя либо автора В) - программное обеспечение
Что бы в дальнейшем все было окей, просто сначала потести карту полностью что бы знать что и как должно быть, а потом вноси изменения, будь внимательней.
Еще советую связаться с автором и поговорить с ним об этой проблеме, или запросить у него еще 1 исходник да бы сверЯться с ним.
Ну вылет у тебя на функции, которая занимается отрисовкой графики. Она универсальная, там и частицы обрабатываются, и поверхности. Так что ошибка явно в модели, а какой и как - хрен его знает
Хз с чем связано, замечал такое при реплесе героя - если меню изучение способностей открыто, то оно открыто у вновь созданного героя, нужно убрать выбор у игрока и добавить выбор на героя снова.
bladget, скорее всего (если у тебя Vista или W7 стоит), в старой папки остались "файлы совместимости", которые не удаляются просто так. В WoO много всякого мусора было...
Кажется проблему решили, ответ крылся в текстурах, скорее всего в типе сжатия Sequental JPEG при пресохранени с другим типом сжатия (Пересохранил текстуры в тга и обратно в блп) - проблема решилась (По крайней мере сейчас так кажется).
Из чего могу предположить, то при определенных обстоятельства Варик или система неадекватно воспринимает текстуры с этим типом сжатия и выпадает
Была прям один в один ситуация. Игра крашица скорее всего от того, что что bounds выходит за пределы карты. Оставляй отступ от краев.
и даже не границы карты, а границы обзора вродебы ломают все
попробуй rect создать на карте, чтобы он был внутри границы обзора. И bounds выставляй по нему.
Вроде работает, но не знаю, так ли у тебя работало ранее. Проверь. Касательно проблем с триггерами не уверен, но вроде бы видел триггеры с одинаковым названием на русском. На всякий случай изменил все названия триггеров с кириллицей на латиницу, так как проблемы с этим уже упоминали. В триггере инициализации было два события, что в итоге приводило бы к двойному срабатыванию, одно из них удалил. Также удалил несколько ретурнов, чтобы с одной стороны увидеть работоспособность триггеров, так удалил ретурн перед постановкой заданий в инициализации, с другой сомневался, что они корректно работают, а проверять было некогда, например, в цикле от 1 до 350 ретурн мог не пустить выполнение цикла дальше первого элемента. Но главное в том, что ты вводишь лишнии глобальные переменные вместо указателей (Triggering unit) или (Item being manipulated), причём их порой даже не используешь, просто устанавливаешь сначала, а в конце обнуляешь. Так не надо делать, пользуйся стандартными указателями на юнитов, типа (Triggering unit) или (Attacking unit), не удаляя или обнуляя их, а то только лишнюю нагрузку создаёшь для памяти, процессора и очереди операций. Обычно (Triggering player) по умолчанию является владельцем (Triggering unit), тоже используй сразу, а не плоди переменные. После удаления точки, не обнуляй её. А ещё попробуйте использовать какие-то оптимизаторы для карты, потому что её загрузка просто жесть - более 50 тысяч переменных для объектов редактор показывал) Только после оптимизации карта будет годна лишь для игры, а в редакторе не будет открываться.
Печатал уточнение и заснул)
Не указал, что вроде бы видел два триггера Безымянный триггер 002 или Безымянный триггер 005, одинаковые имена как раз могли быть причиной проблемы.
» WarCraft 3 / Bars
» WarCraft 3 / Система опыта у игроков
» WarCraft 3 / Хп и Мп бар
» WarCraft 3 / Как дать способности перезарядку?
» WarCraft 3 / Не добавляет в группу
» WarCraft 3 / Проблема с Model editor
» WarCraft 3 / Нативки
» WarCraft 3 / Импорт файлов
» WarCraft 3 / Убрать с панели или скрыть.
» WarCraft 3 / Бинд клавиш.
» WarCraft 3 / Провокация
» WarCraft 3 / Пассивная цепь молний
» WarCraft 3 / ИИ для кампании
» WarCraft 3 / Система создания предметов
» WarCraft 3 / Даммикаст предметом
» WarCraft 3 / Области и перемещение между ними
» WarCraft 3 / Отмена приказа
» WarCraft 3 / Отследить получение способности
» WarCraft 3 / Иконки дота 2
» WarCraft 3 / Скажи НЕТ триггерам
» WarCraft 3 / Звука смерти у юнита
» WarCraft 3 / Панель приказов
» WarCraft 3 / Preload Exploit
» WarCraft 3 / Модификации редактора
» WarCraft 3 / Инициализация карты